//******************************************************************
//系统名称：PMS2.0
//模块名称：移动作业故障抢修
//版本信息：
//版本           日期                                   作者               备注
//1.0   2014/09/02    梁宏平　        新建
//Copyright(C)2014-2022 NARI Information and Communication Technology Branch. All rights reserved.
//#作者:梁宏平$权重:100%$手机:18671951135# 
//******************************************************************
package com.sgcc.sx.pmos.common.utils;

import android.os.Build;
import android.text.TextUtils;

import androidx.annotation.RequiresApi;

import com.blankj.utilcode.util.LogUtils;
import com.sgcc.sx.pmos.common.utils.base64.BASE64Encoder;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;
import java.util.regex.Pattern;


/**
 * 说明 常用工具类
 */
public class SysUtil {


    public static String checkSQL(String text2) {
        if (text2 != null && (!TextUtils.isEmpty(text2))) {
            String reg = "(?:')|(?:--)|(/\\*(?:.|[\\n\\r])*?\\*/)|"
                    + "(\\b(select|update|and|or|delete|insert|trancate|alert|prompt|char|into|substr|ascii|declare|exec|count|master|drop|execute)\\b)";
            Pattern sqlPattern = Pattern.compile(reg, Pattern.CASE_INSENSITIVE);
            String text = text2.toLowerCase();
            if (text.contains("select")) return "select";
            if (text.contains("update")) return "update";
            if (text.contains("and")) return "and";
            if (text.contains("or")) return "or";
            if (text.contains("delete")) return "delete";
            if (text.contains("insert")) return "insert";
            if (text.contains("trancate")) return "trancate";
            if (text.contains("char")) return "char";
            if (text.contains("into")) return "into";
            if (text.contains("substr")) return "substr";
            if (text.contains("ascii")) return "ascii";
            if (text.contains("declare")) return "declare";
            if (text.contains("exec")) return "exec";
            if (text.contains("count")) return "count";
            if (text.contains("master")) return "master";
            if (text.contains("drop")) return "drop";
            if (text.contains("execute")) return "execute";
            if (text.contains("alert")) return "alert";
            if (text.contains("prompt")) return "prompt";
            if (sqlPattern.matcher(text).find()) {
                return "";
            } else {
                return "";
            }
        }
        return "";
    }


    public static Map<Object, Object> checkSpecial(String str) {
        boolean is = false;
        Map<Object, Object> special = new HashMap<Object, Object>();
        StringBuffer buffer = new StringBuffer();
//		str = "&<>＜＞＆" ;
        if (str.indexOf("&") != -1 || str.indexOf(">") != -1 || str.indexOf("<") != -1 ||
                str.indexOf("＆") != -1 || str.indexOf("＜") != -1 || str.indexOf("＞") != -1) {
            if (str.indexOf("&") != -1 || str.indexOf("＆") != -1) {
                buffer.append("&");
            }
            if (str.indexOf(">") != -1 || str.indexOf("＞") != -1) {
                buffer.append(">");
            }
            if (str.indexOf("<") != -1 || str.indexOf("＜") != -1) {
                buffer.append("<");
            }
            is = true;
        } else {
            is = false;
            buffer.append("");
        }
        special.put("special_str", buffer.toString());
        special.put("special_is", is);
        return special;
//		if (str.indexOf("&#") != -1) {
//			return true;
//		} else {
//			return false;
//		}
    }


    /**
     * 正则表达式：验证港澳居民通行证 H/M + 10位或8位数字
     */
    public static final String REGEX_HK_CARD = "^[HMhm]{1}([0-9]{10}|[0-9]{8})$";

    /**
     * 正则表达式：验证台湾居民通行证 新版8位或18位数字,旧版10位数字 + 英文字母
     */
    public static final String REGEX_TW_CARD = "^\\d{8}|^[a-zA-Z0-9]{10}|^\\d{18}$";
    /**
     * 正则表达式：验证护照 数字+字母，共9位
     */
    public static final String REGEX_PASSPORT_CARD = "^([a-zA-z]|[0-9]){9}$";

    /**
     * 正则表达式：统一社会信用代码
     */
    public static final String REGEX_USCC = "/[0-9A-HJ-NPQRTUWXY]{2}\\d{6}[0-9A-HJ-NPQRTUWXY]{10}/";

    /**
     * 正则表达式：密码校验
     */
    public static final String REGEX_PASSWORD = "^(?=.*[a-zA-Z])(?=.*\\d)(?=.*[$.@$#!%*?&])[A-Za-z\\d$@$#.!%*?&]{5,20}";

    /**
     * 正则表达式：固定电话
     */
    public static final String REGEX_TEL = "^0(10|2[0-5789]-|\\d{3})-?\\d{7,8}$";
    ;


    /**
     * 校验密码
     *
     * @param password 密码
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isPasswordCard(String password) {
        //校验非空
        if (TextUtils.isEmpty(password)) {
            return false;
        }
        return password.matches(REGEX_PASSWORD);
    }

  /**
     * 校验固话
     *
     * @param tel 固话
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isTelCard(String tel) {
        //校验非空
        if (TextUtils.isEmpty(tel)) {
            return false;
        }
        return tel.matches(REGEX_TEL);
    }

    public static boolean isCheckPwd(String str) {
        String regex = "^(?!.*[！·（）{}【】“”：；，》￥、。‘’——\\s-……%\\n])(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[~!@#$%^&*()_+`\\-={}:\";'<>?,.\\/])[^\\u4e00-\\u9fa5]{5,20}$";
        boolean isfalg = str.matches(regex);
        if (isfalg) {
            return true;
        }
        return false;
    }

    /**
     * 校验统一社会信用代码
     *
     * @param uusc 统一社会信用代码
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isUSCCCard(String uusc) {
        //校验非空
        if (TextUtils.isEmpty(uusc)) {
            return false;
        }
        return uusc.matches(REGEX_USCC);
    }

    /**
     * 校验护照
     *
     * @param passPortNo 护照号
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isPassPortCard(String passPortNo) {
        //校验非空
        if (TextUtils.isEmpty(passPortNo)) {
            return false;
        }
        return passPortNo.matches(REGEX_PASSPORT_CARD);
    }


    /**
     * 校验港澳通行证
     *
     * @param hmNo 港澳通行证号
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isHMCard(String hmNo) {
        //校验非空
        if (TextUtils.isEmpty(hmNo)) {
            return false;
        }
        return hmNo.matches(REGEX_HK_CARD);
    }

    /**
     * 校验台湾通行证
     * 规则 新版8位或18位数字,旧版10位数字 + 英文字母
     *
     * @param twNo 台湾通行证号
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isTWCard(String twNo) {
        //校验非空
        if (TextUtils.isEmpty(twNo)) {
            return false;
        }
        return twNo.matches(REGEX_TW_CARD);
    }


    @RequiresApi(api = Build.VERSION_CODES.O)
    public static String FileToBase64(File file) {
        int size = (int) file.length();
        byte[] bytes = new byte[size];
        try {
            BufferedInputStream buf = new BufferedInputStream(new FileInputStream(file));
            buf.read(bytes, 0, bytes.length);
            buf.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        String s = Base64.getEncoder().encodeToString(bytes);
        return s;
    }


    public static String encodeBase64File(File file) throws Exception {
        FileInputStream inputFile = new FileInputStream(file);
        byte[] buffer = new byte[(int) file.length()];
        inputFile.read(buffer);
        inputFile.close();
        return new BASE64Encoder().encode(buffer);
    }


}
